//
//  NSString+Util.h
//  ZeroApp
//
//  Created by 松鼠君 on 2018/8/28.
//  Copyright © 2018 松鼠君. All rights reserved.
//

#import <UIKit/UIKit.h>


NS_ASSUME_NONNULL_BEGIN

//字体
#define kFont_PFR @"PingFang-SC-Regular"//常规
#define kFont_PFM @"PingFang-SC-Medium"//中等
#define kFont_PFH  kFont_HB//加重 @"PingFang-SC-Heavy"无用，换成加粗的
#define kFont_PFL  @"PingFang-SC-Light"//减轻
#define kFont_HB  @"Helvetica-Bold"//加粗
//特殊
#define kFont_S_BP @"AliHYAiHei"//扁平

@interface NSString (Util)
-(NSString*_Nullable)md5plusStr;
+(NSString*_Nullable)md5plusStrFor:(NSString*_Nullable)str;
-(NSURL*_Nullable)commonUrl;
//字符串转字典
-(NSDictionary*_Nullable)dictionary;
//字典转字符串
+ (NSString*)convertToJSONData:(id)infoDict;

/**
 字符串是否为真
 */
- (BOOL)isRealString;
/*
 获取字体
 name:字体名称
 size:字体大小
 */
+ (UIFont *_Nullable)fontWithName:(nullable NSString *)name andSize:(CGFloat)size;


#pragma mark 字体宽高相关
/*
 计算字符串的宽度（一行）
 text:可以为普通或富文本字符串
 fontSize:UIFont类型或NSNumber(float)类型
 */
+ (CGFloat)widthForString:(id)text fontSize:(id)fontSize;
/* 计算字体的高度（多行）*/
+ (CGFloat)heightForMoreRow:(NSString *)text textWidth:(CGFloat)textWidth font:(UIFont *)font;
+ (CGFloat)heightForMoreRow:(NSAttributedString *)text textWidth:(CGFloat)textWidth;

/**
 字符串判空
 */
+(BOOL)isExisting:(NSString*_Nullable)str;
//过滤表情
+ (NSString *)filterEmoji:(NSString *)string;

#pragma mark 属性字符串相关
/** 返回一个带图片的属性字符串
 string:文字
 imageName:图片名称
 imageIndex:图片位置
 */
+ (NSMutableAttributedString *)creatByString:(id)string attributes:(NSDictionary *)attrDic image:(NSString *)imageName imageBounds:(CGRect)bounds imageIndex:(NSInteger)imageIndex;
/** 获取一个部分改变的属性字符串 */
+ (NSMutableAttributedString *)getAttStrFromString:(id)string attributes:(NSDictionary *)attrDic start:(NSInteger)start length:(NSInteger)length;
/** 获取一个部分改变的属性字符串 string:参数字符串:普通 可变 aimStr:替换的目标字符串 replaceImg：用于替换的图片
    有多个词替换时，记得从后往前来
 eg:textLabel.attributedText = [NSString getAttStrFromString:textLabel.text font:textLabel.font replaceStr:@"[粉钻]" withImage:kImgWithName(@"tie_pink")];
 */
+ (NSMutableAttributedString *)getAttStrFromString:(id)string font:(UIFont *)aimFont replaceStr:(NSString *)aimStr withImage:(UIImage *)replaceImg;
/** 1获取一个部分改变的属性字符串 string:参数字符串:普通 可变
 有多个词替换时，记得从后往前来
 */
+ (NSMutableAttributedString *)getAttStrFromString:(id)string font:(UIFont *)aimFont;
/** 2获取一个部分改变的属性字符串 string:参数字符串:普通 可变
 有多个词替换时，记得从后往前来
 */
+ (NSMutableAttributedString *)getAttStr2FromString:(id)string font:(UIFont *)aimFont;

#pragma mark rsa加解密
// 返回一个 base64 编码的公钥加密字符串
+ (NSString *)encryptWithPublicKeyForString:(NSString *)str;
// 直接对二进制数据进行公钥加密
+ (NSData *)encryptWithPublicKeyForData:(NSData *)data;
// 返回一个 base64 编码的私钥加密字符串
+ (NSString *)encryptWithPrivateKeyForString:(NSString *)str;
// 直接对二进制数据进行私钥加密
+ (NSData *)encryptWithPrivateKeyForData:(NSData *)data;

// 解密 base64 编码的字符串, 转化成base64 解码的字符串
//公钥解密
+ (NSString *)decryptWithPublicKeyForString:(NSString *)str;
//公钥解密
+ (NSData *)decryptWithPublicKeyForData:(NSData *)data;
//私钥解密
+ (NSString *)decryptWithPrivateKeyForString:(NSString *)str;
//私钥解密
+ (NSData *)decryptWithPrivateKeyForData:(NSData *)data;

#pragma mark 正则验证相关 （国内）
/* 邮箱验证 MODIFIED BY HELENSONG */
- (BOOL)isValidEmail;
/* 手机号码验证 MODIFIED BY HELENSONG */
- (BOOL)isValidPhoneNum;
// 有效的手机号码
- (BOOL)isValidMobile;
//判断手机号类型
- (NSString *)phoneNumberType;
/**  合法密码 */
-(BOOL)isValidPWD;
    
+ (NSString *)filterString:(NSString *)str;
@end



//计算字符串的宽度
//内联调宽
static inline CGFloat wlTextWidth(id text, id fontSize){
    return [NSString widthForString:text fontSize:fontSize];
}


NS_ASSUME_NONNULL_END
